import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import Icons from 'unplugin-icons/vite'
import IconsResolver from 'unplugin-icons/resolver'
import AutoImport from 'unplugin-auto-import/vite' //自动导入依赖插件
import Components from 'unplugin-vue-components/vite' // 导入组件插件
import { resolve } from 'path' // 主要用于alias文件路径别名
import WindiCSS from 'vite-plugin-windicss'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' // 自动导入ele组件
// import ElementPlus from 'unplugin-element-plus/vite'
import viteCompression from 'vite-plugin-compression' // 打包压缩用

function pathResolve(dir) {
  return resolve(__dirname, '.', dir)
}

// https://vitejs.dev/config/
export default defineConfig({
  base: './',
  plugins: [
    vue(),
    WindiCSS(),
    AutoImport({
      resolvers: [
        ElementPlusResolver(),
        IconsResolver({
          prefix: 'Icon',
        }),
      ],
      imports: [
        'vue',
        'vue-router',
        {
          '@/api/newAxios': ['callApi'],
          '@/components/Message': ['Message'],
        },
      ], // 自动导入依赖  // import AutoImport from 'unplugin-auto-import/vite'
      dts: 'src/types/auto-imports.d.ts', // 依赖表
    }),
    Components({
      resolvers: [
        ElementPlusResolver(),
        IconsResolver({
          enabledCollections: ['ep'],
        }),
      ],
      dts: 'src/types/global-components.d.ts',
    }),
    viteCompression({
      //压缩，让体积更小
      verbose: true,
      disable: false,
      threshold: 10240,
      algorithm: 'gzip',
      ext: '.gz',
    }),

    // ElementPlus({
    //   useSource: true,
    //   importStyle: 'sass',
    // }),
  ],
  resolve: {
    alias: {
      '@': pathResolve('./src'),
    },
  },
  // 强制预构建插件包
  optimizeDeps: {
    include: ['axios', 'element-plus'],
  },

  server: {
    open: '/',
    cors: true,
    port: 8090,
    hot: true,
    proxy: {
      '/api/pc': {
        target: 'https://weixts.spacetech.com.cn',
        changeOrigin: true,
      },
      '/areas_v3': {
        target: 'https://geo.datav.aliyun.com',
        changeOrigin: true,
        // rewrite: path => path.replace(/^\/map/, ''),
      },
      '/weixt/securityapi': {
        target: 'https://weixts.spacetech.com.cn',
        changeOrigin: true,
      },
    },
  },
  // css: {
  //   preprocessorOptions: {
  //     //这里注意，键名是scss不是sass！一字之差能让你折腾好久
  //     scss: {
  //       charset: false,
  //       //这里写你想导入全局scss变量的路径
  //       additionalData: "@import 'src/theme/common/index.scss';", //导入CSS
  //     },
  //   },
  // postcss: {
  //   plugins: [
  //     {
  //       postcssPlugin: 'internal:charset-removal',
  //       AtRule: {
  //         charset: atRule => {
  //           if (atRule.name === 'charset') {
  //             atRule.remove()
  //           }
  //         },
  //       },
  //     },
  //   ],
  // },
  // },

  build: {
    chunkSizeWarningLimit: 1000,
    // 启用/禁用 brotli 压缩大小报告。压缩大型输出文件可能会很慢，因此禁用该功能可能会提高大型项目的构建性能。
    brotliSize: false,
    sourcemap: false, // 构建后是否生成 source map 文件。如果为 true，将会创建一个独立的 source map 文件
    assetsInlineLimit: 4096, // 单位字节（1024等于1kb） 小于此阈值的导入或引用资源将内联为 base64 编码，以避免额外的 http 请求。设置为 0 可以完全禁用此项。
    // minify: 'terser', // 'terser' 相对较慢，但大多数情况下构建后的文件体积更小。'esbuild' 最小化混淆更快但构建后的文件相对更大。
    rollupOptions: {
      output: {
        chunkFileNames: 'js/[name]-[hash].js',
        entryFileNames: 'js/[name]-[hash].js',
        assetFileNames: '[ext]/[name]-[hash].[ext]',
        manualChunks: {
          // 拆分代码
          'element-plus': ['element-plus'],
          'wxt-utils': ['wxt-utils'],
        },
      },
    },
  },
})
